package com.sk.ccflower.lib.util.json;

import java.io.IOException;
import java.io.Writer;

import com.sk.ccflower.lib.util.JSONUtil;

/**
 * JSON의 숫자(number) 값을 나타내는 클래스.
 * @author  dagui
 */
public class JSONNumber extends JSONObject {

	private static final long serialVersionUID = -4428477426803747713L;
	
	private Number value;
	
	/*
	 * constructors
	 */

	public JSONNumber(Number value) {
		this.value = value;
	}

	public JSONNumber(byte value) {
		this.value = new Byte(value);
	}

	public JSONNumber(double value) {
		this.value = new Double(value);
	}

	public JSONNumber(float value) {
		this.value = new Float(value);
	}

	public JSONNumber(int value) {
		this.value = new Integer(value);
	}

	public JSONNumber(long value) {
		this.value = new Long(value);
	}

	public JSONNumber(short value) {
		this.value = new Short(value);
	}

	/*
	 * implements JSONObject
	 */
	
	@Override
	public void writeJSON(Writer out) throws IOException {
		JSONUtil.writeJSON(value, out);
	}

	/**
	 * @return
	 */
	@Override
	public Object getValue() {
		return value;
	}

	/*
	 * imitate java.lang.Boolean
	 */

	/**
	 * byte 형 값으로 변환된 값을 리턴한다.
	 * @see Number#byteValue()
	 */
	public byte byteValue() {
		return (value == null)? 0: value.byteValue();
	}

	/**
	 * double형 값으로 변환된 값을 리턴한다.
	 * @see Number#doubleValue()
	 */
	public double doubleValue() {
		return (value == null)? 0: value.doubleValue();
	}

	/**
	 * float형 값으로 변환된 값을 리턴한다.
	 * @see Number#floatValue()
	 */
	public float floatValue() {
		return (value == null)? 0: value.floatValue();
	}

	/**
	 * int형 값으로 변환된 값을 리턴한다.
	 * @see Number#intValue()
	 */
	public int intValue() {
		return (value == null)? 0: value.intValue();
	}

	/**
	 * long형 값으로 변환된 값을 리턴한다.
	 * @see Number#longValue()
	 */
	public long longValue() {
		return (value == null)? 0: value.longValue();
	}

	/**
	 * short형 값으로 변환된 값을 리턴한다.
	 * @see Number#shortValue()
	 */
	public short shortValue() {
		return (value == null)? 0: value.shortValue();
	}

}
